package sshftp

import (
	"bytes"
)

func (this *Client) Cmd(cmd string) (stdout, stderr string, err error) {
	var (
		stdoutBuf bytes.Buffer
		stderrBuf bytes.Buffer
	)
	err = this.connect()
	if err!=nil{
		return stdoutBuf.String(),stderrBuf.String(),err
	}

	this.sshSession.Stdout = &stdoutBuf
	this.sshSession.Stderr = &stderrBuf
	err = this.sshSession.Run(cmd)
	defer this.sshSession.Close()
	stdout = stdoutBuf.String()
	stderr = stderrBuf.String()
	return
}

//func (c *SSHClient) Pipe(rw ReadWriteCloser, pty *PtyInfo, deadline *time.Time, idleTimeout int) (currentSession *SshSession, err error) {
//	if c.isConnected == false {
//		_, err := c.Connect()
//		if err != nil {
//			return nil, err
//		}
//	}
//	currentSession, err = NewSession(c.remoteConn, deadline, idleTimeout)
//	if err != nil {
//		return
//	}
//
//	if err = currentSession.RequestPty(pty.Term, pty.H, pty.W, pty.Modes); err != nil {
//		return
//	}
//	wc, err := currentSession.StdinPipe()
//	if err != nil {
//		return
//	}
//
//	go CopyIOAndUpdateSessionDeadline(wc, rw, currentSession)
//
//	r, err := currentSession.StdoutPipe()
//	if err != nil {
//		return
//	}
//	go CopyIOAndUpdateSessionDeadline(rw, r, currentSession)
//	er, err := currentSession.StderrPipe()
//	if err != nil {
//		return
//	}
//	go CopyIOAndUpdateSessionDeadline(rw, er, currentSession)
//	err = currentSession.Shell()
//	if err != nil {
//		return
//	}
//	err = currentSession.Wait()
//	if err != nil {
//		return
//	}
//	defer currentSession.Close()
//	return
//}

//func getClient(hostname string) (client *SSHClient, err error) {
//	if hostname == "" {
//		return nil, errors.New("host name is empty")
//	}
//	sshClientsMutex.RLock()
//	client = sshClients[hostname]
//	if client != nil {
//		return client, nil
//	}
//	sshClientsMutex.RUnlock()
//	return nil, errors.New("client not create")
//}
//
//func ExecuteCmd(cmd, hostname string) (output, errput string, currentSession *SshSession, err error) {
//	client, err := getClient(hostname)
//	if err != nil {
//		return
//	}
//	return client.Cmd(cmd, nil, nil, 0)
//}

//func UploadFile(hostname, sourceFile, targetFile string) (stdout, stderr string, err error) {
//	client, err := getClient(hostname)
//	if err != nil {
//		return
//	}
//	f, err := os.Open(sourceFile)
//	if err != nil {
//		return
//	}
//	defer f.Close()
//	data, err := ioutil.ReadAll(f)
//	if err != nil {
//		return
//	}
//	return client.TransferData(targetFile, data)
//}

